/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package isgesis;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author Agustin
 */
public class PersistenciaEstado {

    private static PersistenciaEstado instance;

    public static PersistenciaEstado getInstance() {
        if (instance == null) {
            instance = new PersistenciaEstado();
        }
        return instance;
    }

    public ResultSet ejecutarSeleccion(String query) throws SQLException {
        ResultSet rs;
        try {
            Conexion.getInstance().conectar();
            rs = Conexion.getInstance().select(query);
        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return rs;
    }

    public Estado recorerRS(ResultSet rs) throws SQLException, ParseException {
        Estado e1 = new Estado();
        try {
            e1.setId(Integer.parseInt(rs.getObject(1).toString()));
            e1.setEstado(rs.getObject(2).toString());

        } catch (Exception e) {
            throw new UnsupportedOperationException(e.toString());
        }
        return e1;
    }

    public List<Estado> traerRS(String query) throws ParseException {
        List<Estado> estados = new ArrayList<Estado>();
        try {
            ResultSet rs = ejecutarSeleccion(query);
            if (rs.next()) {
                estados.add(recorerRS(rs));
                while (rs.next()) {
                    estados.add(recorerRS(rs));
                }
            } else {
                Estado e = new Estado();
                estados.add(e);
            }
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaCliente.class.getName()).log(Level.SEVERE, null, ex);
        }
        return estados;
    }

    public List<Estado> selectEstado(ArrayList<Object> datos) throws ParseException, SQLException {
        String query = "";
        if (datos.get(1) == "idEstado") {
            query = "SELECT * FROM estados WHERE idestado=" + datos.get(0);
        } else {
            query = "SELECT * FROM estados WHERE nombre=" + datos.get(0);
        }
        return traerRS(query);
    }

    public void insert(Estado estado) throws ParseException {
        try {
            String query = "insert into estados (nombre) values (" + estado.getEstado() + ")";
            Conexion.getInstance().conectar();
            Conexion.getInstance().insert(query);
        } catch (SQLException ex) {
            Logger.getLogger(PersistenciaEstado.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}